package doing.normal_001_100;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;


/**
 * 最长无重复字符的子串
 * <p>
 * Example 1:
 * Input: "abcabcbb"
 * Output: 3
 * Explanation: The answer is "abc", with the length of 3.
 * <p>
 * https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
 * <p>
 * 这里我们可以建立一个HashMap，建立每个字符和其最后出现位置之间的映射，然后我们需要定义两个变量res和left，
 * 其中res用来记录最长无重复子串的长度，left指向该无重复子串左边的起始位置的前一个，由于是前一个，所以初始
 * 化就是-1，然后我们遍历整个字符串，对于每一个遍历到的字符，如果该字符已经在HashMap中存在了，并且如果其映
 * 射值大于left的话，那么更新left为当前映射值。然后映射值更新为当前坐标i，这样保证了left始终为当前边界的前
 * 一个位置，然后计算窗口长度的时候，直接用i-left即可，用来更新结果res。
 *
 * @author 大硕
 * 2019-03-19 9:40 PM
 **/
@Slf4j
public class LongestSubstringWithoutRepeatingCharacters {

    @SuppressWarnings("all")
    public int lengthOfLongestSubstring(String s) {
        // 0319 first
        return -1;
    }

    @Test
    public void test() {
        log.info("result:{}", lengthOfLongestSubstring("aaaaaaaaaaaaaa"));
    }
}
































/*
public int lengthOfLongestSubstring(String s) {
    int res = 0, left = 0, right = 0;
    HashSet<Character> t = new HashSet<Character>();
    while (right < s.length()) {
        if (!t.contains(s.charAt(right))) {
            t.add(s.charAt(right++));
            res = Math.max(res, t.size());
        } else {
            t.remove(s.charAt(left++));
        }
    }
    return res;
}
*/
